package org.kingtop.mybatis.mapper;

import org.kingtop.mybatis.plugin.Pagination;
import org.kingtop.sys.PageBean;

import java.util.List;

/**
 * 接口的基类，提供基础方法
 *
 * @author 陈金波
 * @date 2018年1月2日 下午2:49:48
 * @Copyright: 2018 chen jinbo. All rights reserved.
 */
public interface IBaseDaoMapper<T> {

	/**
	 * 通过id获取数据
	 * 
	 * @author 陈金波
	 * @date 2018年1月2日 下午3:30:34
	 * @param id 主键
	 * @return T
	 */
	T getById(Long id);

	/**
	 * 通过多个id查询数据
	 * @param ids  多个id，通过逗号隔开
	 * @return 多条数据
	 */
	List<T> listByIds(List<Long> ids);

	/**
	 * 通过条件查询数据
	 * @param value 查询条件
	 * @return 多条数据
	 */
	List<T> listByBean(T value);

	/**
	 * 返回所有的数据
	 *
	 * @author 陈金波
	 * @date 2018年1月2日 下午3:01:53
	 * @return List<T> 所有数据
	 */
	List<T> listAll();

	/**
	 * 根据条件，分页查询
	 * @param value 查询条件
	 * @param pagination 分页
	 * @return 分页数据
	 */
	PageBean<T> pageByBean(T value, Pagination pagination);

	/**
	 * 添加，返回插入数据库的条数
	 * 
	 * @author 陈金波
	 * @date 2018年1月2日 下午2:50:05
	 * @param value 要插入的数据
	 * @return int 插入的条数
	 */
	int add(T value);

	/**
	 * 更新，返回更新的条数
	 * 
	 * @author 陈金波
	 * @date 2018年1月2日 下午3:01:20
	 * @param value 要更新的数据
	 * @return int 更新是数据条数
	 */
	int update(T value);

	/**
	 * 更新非空字段
	 * @author 陈金波
	 * @date 2018/02/04 20:31
	 * @param value 要更新的数据
	 * @return int 更新的条数
	 */
	int updateForNotNull(T value);

	/**
	 * 通过主键id删除数据
	 * 
	 * @author 陈金波
	 * @date 2018年1月2日 下午3:04:23
	 * @param id 要删除数据的主键
	 * @return int 删除的数据条数
	 */
	int deleteById(Long id);

	/**
	 * 根据id删除多条数据
	 * @param ids 多个id，通过逗号分隔
	 * @return 删除条数
	 */
	int deleteByIds(List<Long> ids);

	/**
	 * 通过条件删除数据
	 * @param value 删除的条件
	 * @return 删除条数
	 */
	int deleteByBean(T value);

}
